home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 15018 / 15018.xpi / install.js < prev    next >
Text File  |  2009-10-14  |  4KB  |  119 lines

  1. // XpiInstaller
  2. // By Pike (Heavily inspired by code from Henrik Gemal and Stephen Clavering)
  3.  
  4. var XpiInstaller = {
  5.  
  6.     // --- Editable items begin ---
  7.     extFullName: 'Throbber Changer', // The name displayed to the user (don't include the version)
  8.     extShortName: 'TChanger', // The leafname of the JAR file (without the .jar part)
  9.     extVersion: '0.1',
  10.     extAuthor: 'Mirel Sehic',
  11.     extLocaleNames: null, // e.g. ['en-US', 'en-GB']
  12.     extSkinNames: null, // e.g. ['classic', 'modern']
  13.     extPostInstallMessage: 'Success! Please restart your browser to finish the installation.', // Set to null for no post-install message
  14.     // --- Editable items end ---
  15.  
  16.     profileInstall: true,
  17.     silentInstall: false,
  18.  
  19.     install: function()
  20.     {
  21.         var jarName = this.extShortName + '.jar';
  22.         var profileDir = Install.getFolder('Profile', 'chrome');
  23.  
  24.         // Parse HTTP arguments
  25.         this.parseArguments();
  26.  
  27.         // Check if extension is already installed in profile
  28.         if (File.exists(Install.getFolder(profileDir, jarName)))
  29.         {
  30.             if (!this.silentInstall)
  31.             {
  32.                 Install.alert('Updating existing Profile install of ' + this.extFullName + ' to version ' + this.extVersion + '.');
  33.             }
  34.             this.profileInstall = true;
  35.         }
  36.         else if (!this.silentInstall)
  37.         {
  38.             // Ask user for install location, profile or browser dir?
  39.             this.profileInstall = Install.confirm('Install ' + this.extFullName + ' ' + this.extVersion + ' to your Profile directory (OK) or your Browser directory (Cancel)?');
  40.         }
  41.  
  42.         // Init install
  43.         var dispName = this.extFullName + ' ' + this.extVersion;
  44.         var regName = '/' + this.extAuthor + '/' + this.extShortName;
  45.         Install.initInstall(dispName, regName, this.extVersion);
  46.  
  47.         // Find directory to install into
  48.         var installPath;
  49.         if (this.profileInstall) installPath = profileDir;
  50.         else installPath = Install.getFolder('chrome');
  51.  
  52.         // Add JAR file
  53.         Install.addFile(null, 'chrome/' + jarName, installPath, null);
  54.  
  55.         // Register chrome
  56.         var jarPath = Install.getFolder(installPath, jarName);
  57.         var installType = this.profileInstall ? Install.PROFILE_CHROME : Install.DELAYED_CHROME;
  58.  
  59.         // Register content
  60.         Install.registerChrome(Install.CONTENT | installType, jarPath, 'content/' + this.extShortName + '/');
  61.  
  62.         // Register locales
  63.         for (var locale in this.extLocaleNames)
  64.         {
  65.             var regPath = 'locale/' + this.extLocaleNames[locale] + '/' + this.extShortName + '/';
  66.             Install.registerChrome(Install.LOCALE | installType, jarPath, regPath);
  67.         }
  68.  
  69.         // Register skins
  70.         for (var skin in this.extSkinNames)
  71.         {
  72.             var regPath = 'skin/' + this.extSkinNames[skin] + '/' + this.extShortName + '/';
  73.             Install.registerChrome(Install.SKIN | installType, jarPath, regPath);
  74.         }
  75.  
  76.         // Perform install
  77.         var err = Install.performInstall();
  78.         if (err == Install.SUCCESS || err == Install.REBOOT_NEEDED)
  79.         {
  80.             if (!this.silentInstall && this.extPostInstallMessage)
  81.             {
  82.                 Install.alert(this.extPostInstallMessage);
  83.             }
  84.         }
  85.         else
  86.         {
  87.             this.handleError(err);
  88.             return;
  89.         }
  90.     },
  91.  
  92.     parseArguments: function()
  93.     {
  94.         // Can't use string handling in install, so use if statement instead
  95.         var args = Install.arguments;
  96.         if (args == 'p=0')
  97.         {
  98.             this.profileInstall = false;
  99.             this.silentInstall = true;
  100.         }
  101.         else if (args == 'p=1')
  102.         {
  103.             this.profileInstall = true;
  104.             this.silentInstall = true;
  105.         }
  106.     },
  107.  
  108.     handleError: function(err)
  109.     {
  110.         if (!this.silentInstall)
  111.         {
  112.             Install.alert('Error: Could not install ' + this.extFullName + ' ' + this.extVersion + ' (Error code: ' + err + ')');
  113.         }
  114.         Install.cancelInstall(err);
  115.     }
  116. };
  117.  
  118. XpiInstaller.install();
  119.